package main

import (
	"fmt"
	"log"
	"net/http"

	// 确保这些 import 路径与您的项目结构匹配
	"grpc-jwt-yonghurenzheng/v2.1_jwt/config"
	"grpc-jwt-yonghurenzheng/v2.1_jwt/handlers"
	// "grpc-jwt-yonghurenzheng/v2.1_jwt/middleware" // 假设您的中间件位于 middleware 包中

	"github.com/gorilla/mux"
)

func main() {
	// 1. 初始化数据库
	config.InitDB()
	
	// 2. 创建主路由
	r := mux.NewRouter()

	// --- 3. 定义路由 ---

	// 公开路由，任何人都可访问
	// 这些路由直接注册在主路由 r 上
	r.HandleFunc("/register", handlers.Register).Methods("POST")
	r.HandleFunc("/login", handlers.Login).Methods("POST")
	
	// 创建一个子路由，所有路径都以 /api 开头
	// 我们将所有需要认证的接口都放在这个子路由下
	api := r.PathPrefix("/api").Subrouter()

	// 使用 .Use() 方法，为 /api 子路由下的所有路由统一应用 JWT 认证中间件
	api.Use(handlers.JWTMiddleware)

	// 受保护的路由，只有携带有效 Token 的请求才能访问
	// 注意：这些路由现在是注册在 api 子路由上，而不是主路由 r 上
	// 因此它们的访问路径是 /api/profile 和 /api/delete_user
	api.HandleFunc("/profile", handlers.Profile).Methods("GET")
	api.HandleFunc("/delete_user", handlers.DeleteUser).Methods("DELETE")

	// 4. 启动服务
	port := "8080"
	fmt.Printf("🚀 V2 (JWT) 服务启动于 http://localhost:%s\n", port)
	if err := http.ListenAndServe(":"+port, r); err != nil {
		log.Fatalf("服务启动失败: %v", err)
	}
}